package com.zmc.lostfound.search.vo;

import com.zmc.lostfound.common.valid.ValueIntList;
import com.zmc.lostfound.common.valid.ValueStringList;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.io.Serializable;

import static com.zmc.lostfound.common.constant.ElasticSearchConstant.ASC;
import static com.zmc.lostfound.common.constant.ElasticSearchConstant.DESC;

/**
 * @author zmc
 * @description 用户搜索参数请求体
 */
@Data
@ApiModel("用户搜索参数请求体")
public class UserSearchVO implements Serializable {

    private static final long serialVersionUID = 7931366311781595549L;

    /**
     * 全文检索关键字
     */
    @ApiModelProperty("全文检索关键字")
    private String keyword;

    /**
     * 性别(0:女，1:男)
     */
    @ApiModelProperty("性别(0:女，1:男)")
    @ValueIntList(values = {0, 1}, message = "性别只能为0或1[0:女，1:男]")
    private Integer sex;

    /**
     * 封号状态(0:未封号，1:已封号)
     */
    @ApiModelProperty("封号状态(0:未封号，1:已封号)")
    @ValueIntList(values = {0, 1}, message = "封号状态只能为0或1[0:未封号，1:已封号]")
    private Integer disableStatus;

    /**
     * 按id排序(asc:升序，desc:降序)
     */
    @ApiModelProperty("按id排序(asc:升序，desc:降序)")
    @ValueStringList(values = {ASC, DESC}, message = "排序字段只能为asc或desc")
    private String sortByUserId;

    /**
     * 按注册时间排序(asc:升序，desc:降序)
     */
    @ApiModelProperty("按注册时间排序(asc:升序，desc:降序)")
    @ValueStringList(values = {ASC, DESC}, message = "排序字段只能为asc或desc")
    private String sortByGmtCreate;

    /**
     * 当前页码
     */
    @ApiModelProperty("当前页码")
    @NotNull(message = "当前页码不能为null")
    @Min(value = 1, message = "当前页码必须大于或等于1")
    private Integer pageNo;

    /**
     * 页面大小
     */
    @ApiModelProperty("页面大小")
    @NotNull(message = "页面大小不能为null")
    @Min(value = 3, message = "页面大小必须大于或等于3")
    @Max(value = 100, message = "页面大小必须小于或等于100")
    private Integer pageSize;

}
